# 1. 实现菜单函数，输出下列信息，返回用户输入的编号，并进行输入校验。
#
#     print("****************************************")
#     print("*                                学生管理系统                         *")
#     print("*              1. 添加新学生信息              *")
#     print("*             2. 通过学号修改学生信息                 *")
#     print("*                3. 通过学号删除学生信息                 *")
#     print("*                4. 通过姓名删除学生信息                 *")
#     print("*             5. 通过学号查询学生信息          *")
#     print("*                6. 通过姓名查询学生信息          *")
#     print("*                7. 显示所有学生信息             *")
#     print("*                8. 退出系统                                           *")
#     print("****************************************")
#     select_op = input("输入编号选择操作：")
#
# 2. 实现控制函数，用来控制菜单的输出与功能的选择，直到用户选择8，结束程序运行。

list_student = [
    {
        "id": "01",
        "name": "z汉三",
        "age": 12,
        "sex": "按"
    },
    {
        "id": "02",
        "name": "汉三",
        "age": 12,
        "sex": "按"
    }
]


# 3. 实现添加学生函数，函数参数为编号，姓名，年龄，性别四个参数，返回是否添加成功的结果，要求编号不可重复。

def add_student(stu_no: str, name, age, sex) -> bool:
    # 要判断id是否存在
    if not select_by_id(stu_no):
        data = {
            "id": stu_no,
            "name": name,
            "age": age,
            "sex": sex
        }
        list_student.append(data)
        return True
    else:
        return False


# 7. 实现查询函数，参数为学号，如果学生存在，则输出学生信息，不存在输出提示，并返回是否查询成功
def select_by_id(stu_no: str) -> dict | bool:
    for student in list_student:
        if stu_no in student.values():
            return student
    else:
        return False


# 8. 实现查询函数，参数为姓名，如果学生存在，则输出学生信息（同名学生全部输出），不存在输出提示，并返回是否删除成功
def select_by_name(name) -> list:
    list_name = []
    for student in list_student:
        if name in student.values():
            list_name.append(student)
    return list_name


# 5. 实现删除函数，参数为学号，如果学生存在，则进行删除，不存在输出提示，并返回是否删除成功

def delete_by_id(stu_no: str) -> bool:
    if select_by_id(stu_no):
        for i in range(len(list_student)):
            if stu_no in list_student[i].values():
                list_student.pop(i)
                return True
    else:
        return False


# 6. 实现删除函数，参数为姓名，如果学生存在，则进行删除（同名学生全部删除），不存在输出提示，并返回是否删除成功
def delete_by_name(name) -> bool:
    if select_by_name(name):
        for i in range(len(list_student) - 1, -1, -1):
            if name in list_student[i].values():
                list_student.pop(i)
        else:
            return True
    else:
        return False


# 4. 实现修改函数，参数为学号，如果学生存在，则进行修改，不存在输出提示，并返回是否修改成功

def update_by_id(stu_no: str, name, age, sex) -> bool:
    if select_by_id(stu_no):
        for i in range(len(list_student)):
            if stu_no in list_student[i].values():
                list_student[i]["name"] = name
                list_student[i]["age"] = age
                list_student[i]["sex"] = sex
                return True
    else:
        return False


# 9. 实现函数，输出所有学生信息
def select_all():
    for student in list_student:
        print(student)


def main():
    while True:
        print("****************************************")
        print("*                                学生管理系统                         *")
        print("*              1. 添加新学生信息              *")
        print("*             2. 通过学号修改学生信息                 *")
        print("*                3. 通过学号删除学生信息                 *")
        print("*                4. 通过姓名删除学生信息                 *")
        print("*             5. 通过学号查询学生信息          *")
        print("*                6. 通过姓名查询学生信息          *")
        print("*                7. 显示所有学生信息             *")
        print("*                8. 退出系统                                           *")
        print("****************************************")
        select_op = input("输入编号选择操作：")
        if select_op == "1":
            stu_no = input("请输入学号：")
            name = input("请输入姓名：")
            age = input("请输入年龄：")
            sex = input("请输入性别：")
            if add_student(stu_no, name, age, sex):
                print("添加成功")
            else:
                print("添加失败")

        elif select_op == "2":
            stu_no = input("请输入学号：")
            name = input("请输入姓名：")
            age = input("请输入年龄：")
            sex = input("请输入性别：")
            if update_by_id(stu_no, name, age, sex):
                print("修改成功")
            else:
                print("修改失败")
        elif select_op == "3":
            stu_no = input("请输入学号：")
            if delete_by_id(stu_no):
                print("删除成功")
            else:
                print("删除失败")

        elif select_op == "4":
            name = input("请输入姓名：")
            if delete_by_name(name):
                print("删除成功")
            else:
                print("删除失败")
        elif select_op == "5":
            stu_no = input("请输入学号：")
            student = select_by_id(stu_no)
            if student:
                print(student)
            else:
                print("没有此学生")
        elif select_op == "6":
            name = input("请输入姓名：")
            student = select_by_name(name)
            if student:
                print(student)
            else:
                print("没有此学生")
        elif select_op == "7":
            select_all()
        elif select_op == "8":
            break


if __name__ == '__main__':
    main()
